package gjbsh.bangong.ds.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import gjbsh.bangong.ds.dao.权限模块Mapper;
import gjbsh.bangong.ds.model.权限用户角色;

/**
 * @author yaolongjun
 * @date   2020年5月22日 上午9:58:50
 */
@Service
public class 权限模块Service {
	
	@Value("${userid}")
	private String userid;
	
	@Autowired
	权限模块Mapper ddMapper;
	
	@Autowired
	权限用户角色Service dd权限用户角色Service;
	
	@Autowired
	权限模块分配表Service dd权限模块分配表Service;

	// 根据用户ID查询权限模块 
	public List<Map<String, Object>> findMoudleListByUserId(String ppUserId, String ppCurrentUserId) {
		// 查询用户的类型
		String mmUserLeixing = getLeixing(ppUserId);
		
		List<Map<String,Object>> mmResultMoudleList = new ArrayList<Map<String,Object>>(); 
		
		// 判断当前登录用户是否为超管
		if(userid.equals(ppCurrentUserId)) {
			// 取所有权限_模块及当前用户的模块分配情况
			mmResultMoudleList = findAllQuanxianMoudle(mmUserLeixing,ppUserId);
		}else {
			// 当前登录用户可管理的模块
			List<Map<String,Object>> mmMoudleList = new ArrayList<Map<String,Object>>();
			
			// 查询当前登录用户的类型
			String mmCurrentUserLeixing = getLeixing(ppCurrentUserId);
			// 取当前登录用户可管理的模块
			if(mmCurrentUserLeixing.equals("User")) {
				// 取用户模块
				mmMoudleList = dd权限模块分配表Service.findUserMoudleByUserId(ppCurrentUserId);
			}else if(mmCurrentUserLeixing.equals("Role")){
				// 取角色模块
				mmMoudleList = dd权限模块分配表Service.findJueseMoudleByUserId(ppCurrentUserId);
			}
			
			// 若当前登录的用户有可管理模块，查询被管理的用户权限模块
			List<String> mmMoudleIdList = new ArrayList<String>();
			if(mmMoudleList.size() > 0) {
				// 用户的模块模块
				List<Map<String,Object>> mmTempMoudleList = new ArrayList<Map<String,Object>>();
				if(mmUserLeixing.equals("User")) {
					// 取用户模块
					mmTempMoudleList = dd权限模块分配表Service.findUserMoudleByUserId(ppUserId);
				}else if(mmUserLeixing.equals("Role")){
					// 取角色模块
					mmTempMoudleList = dd权限模块分配表Service.findJueseMoudleByUserId(ppUserId);
				}
				
				for(int i = 0; i < mmTempMoudleList.size(); i++) {
					Map<String,Object> mmTempMoudleMap = mmTempMoudleList.get(i);
					if(mmTempMoudleMap != null) {
						String mmTempMoudleId = mmTempMoudleMap.get("模块ID") == null ? "" : mmTempMoudleMap.get("模块ID").toString();
						mmMoudleIdList.add(mmTempMoudleId);
					}
				}
			}
			
			// 循环绑定该用户当前模块是否分配
			for(int i = 0; i < mmMoudleList.size(); i++) {
				Map<String, Object> mmMoudleMap = mmMoudleList.get(i);
				if(mmMoudleMap != null) {
					String mmMoudleId = mmMoudleMap.get("模块ID") == null ? "" : mmMoudleMap.get("模块ID").toString();
					if(mmMoudleIdList.contains(mmMoudleId)) {
						mmMoudleMap.put("是否分配", 1);
					}else {
						mmMoudleMap.put("是否分配", 0);
					}
				}
			}
			
			mmResultMoudleList = mmMoudleList;
			
		}
		
		return mmResultMoudleList;
	}

	// 查询当前用户的类型
	public String getLeixing(String ppUserId) {
		String mmLeixing = "";
		List<权限用户角色> mmQuanxianYonghuJueseList = dd权限用户角色Service.findByUserId(ppUserId);
		if(mmQuanxianYonghuJueseList.size() > 0) {
			mmLeixing = "Role";
		}else {
			mmLeixing = "User";
		}
		return mmLeixing;
	}

	// 取所有权限_模块及当前用户的模块分配情况
	public List<Map<String, Object>> findAllQuanxianMoudle(String mmLeixing, String ppUserId) {
		return ddMapper.findAllQuanxianMoudle(mmLeixing,ppUserId);
	}
	
	

}
